#include <my_header.h>
// 使用sigaction 注册一个2号信号:ctrl+c

/* Usage: ./5_sigaction_handler */
void func(int sig_val)
{
    printf("sig_val :%d\n", sig_val);
}
int main(void){
    // 创建两个结构体对象
    struct sigaction act, old;
    // 清空
    memset(&act, 0, sizeof(act));
    // 指向一个处理函数
    act.sa_handler = func;
    // 要捕获的信号SIGINT 
    // act信号的新处理动作指向func函数
    // old上一个信号的处理动作 act信号
    sigaction(SIGINT, &act, &old);
    while(1);
    return 0;
}

#if 0

int sigaction(
  int signum, // 要操作的信号编号(除了不能捕获的SIGKILL和SIGSTOP)
  const struct sigaction *act,// 指定信号的新处理动作(如果非空)
  struct sigaction *oldact// 获取信号的上一个处理动作(如果非空)
);
// 返回值: 成功时返回0，错误时返回-1



// 是用于定义信号处理的行为
struct sigaction{
void (*sa handler)(int);// 函数指针:指向一个信号
处理函数(和sa_sigaction选一个即可)

void (*sa sigaction)(int,siginfo t*,void*);
// 函数指针:指向一个接受三个参数的信号处理函数

sigset_t sa_mask;// 信号集:指定当前信号处理函数执行时
需要阻塞的额外信号

int sa_f1ags;// 指定信号处理的选项和标志:

void *sa restorer)(void);// 过时,暂无用;

siginfo t { si_pid; pid_t /* sending process ID */
sigval_t si_value; /* signal value */
#endif
